package com.bbva.kyfb.kyfbdaohostimpl.servicios.host.tlsmt298_1_1_1;

import org.springframework.roo.addon.javabean.RooJavaBean;
import org.springframework.roo.addon.serializable.RooSerializable;
import org.springframework.roo.addon.tostring.RooToString;

import com.bbva.jee.arq.spring.core.host.Cabecera;
import com.bbva.jee.arq.spring.core.host.Cuerpo;
import com.bbva.jee.arq.spring.core.host.NombreCabecera;
import com.bbva.jee.arq.spring.core.host.RespuestaTransaccionMultiformato;


/**
 * Bean de respuesta para la transacci&oacute;n <code>TLSMT298</code>.
 *
 * @see PeticionTransaccionTlsmt298_1_1_1
 */
@RespuestaTransaccionMultiformato(formatos = {Formato2.class, Formato1.class})
@RooJavaBean
@RooToString(excludeFields = {"cuerpoComoFormato2", "cuerpoComoFormato1", "cuerpoComoFormato"})
@RooSerializable
public class RespuestaTransaccionTlsmt298_1_1_1 implements java.io.Serializable {
	
	/** <p>Cabecera <code>COD-AVISO</code></p>. */
	@Cabecera(nombre=NombreCabecera.CODIGO_AVISO)
	private String codigoAviso;
	
	/** <p>Cabecera <code>DES-AVISO</code></p>. */
	@Cabecera(nombre=NombreCabecera.DESCRIPCION_AVISO)
	private String descripcionAviso;
	
	/** <p>Cabecera <code>COD-RETORNO</code></p>. */
	@Cabecera(nombre=NombreCabecera.CODIGO_RETORNO)
	private String codigoRetorno;
	
	/** <p>Cabecera <code>FORMATO</code></p>. */
	@Cabecera(nombre=NombreCabecera.FORMATO)
	private Integer formato;
	
	/** <p>Cuerpo del mensaje de respuesta multiformato</p>. */
	@Cuerpo
	private Object cuerpo;
	
	/**
	 * <p>Permite obtener el cuerpo del mensaje de respuesta multiformato
	 * a partir de la clase java que representa el formato de respuesta</p>.
	 *
	 * @param <T> the generic type
	 * @param formato Clase java que representa el formato de respuesta
	 * @return Cuerpo del mensaje, convertido a la clase java indicada, o
	 * bien <code>null</null> si el formato del cuerpo del mensaje no coincide
	 * con la clase indicada.
	 */
	public <T> T getCuerpoComoFormato(Class<T> formato) {
        if ( formato == null ) return null;        	
        if ( formato.isInstance(cuerpo) ) return formato.cast(cuerpo);
        return null;   
    }
	
	/**
	 * <p>Permite obtener el cuerpo del mensaje de respuesta multiformato
	 * cuando el formato del mensaje es 2</p>.
	 *
	 * @return Cuerpo del mensaje, convertido a la clase Formato2, o
	 * bien <code>null</null> si el formato del cuerpo del mensaje no es 2.
	 */
	public Formato2 getCuerpoComoFormato2() {
		if ( cuerpo instanceof Formato2 ) return (Formato2) cuerpo;
		return null;
	}

	/**
	 * <p>Permite obtener el cuerpo del mensaje de respuesta multiformato
	 * cuando el formato del mensaje es 1</p>.
	 *
	 * @return Cuerpo del mensaje, convertido a la clase Formato1, o
	 * bien <code>null</null> si el formato del cuerpo del mensaje no es 1.
	 */
	public Formato1 getCuerpoComoFormato1() {
		if ( cuerpo instanceof Formato1 ) return (Formato1) cuerpo;
		return null;
	}


	/**{@inheritDoc}
	 * @see java.lang.Object#toString()
	 */
	public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append("CodigoAviso: ").append(getCodigoAviso()).append(", ");
        sb.append("CodigoRetorno: ").append(getCodigoRetorno()).append(", ");
        sb.append("Cuerpo: ").append(getCuerpo()).append(", ");
        sb.append("DescripcionAviso: ").append(getDescripcionAviso()).append(", ");
        sb.append("Formato: ").append(getFormato());
        return sb.toString();
    }

	/**
	 * Gets the codigo aviso.
	 *
	 * @return the codigo aviso
	 */
	public String getCodigoAviso() {
        return this.codigoAviso;
    }

	/**
	 * Sets the codigo aviso.
	 *
	 * @param codigoAviso the new codigo aviso
	 */
	public void setCodigoAviso(String codigoAviso) {
        this.codigoAviso = codigoAviso;
    }

	/**
	 * Gets the descripcion aviso.
	 *
	 * @return the descripcion aviso
	 */
	public String getDescripcionAviso() {
        return this.descripcionAviso;
    }

	/**
	 * Sets the descripcion aviso.
	 *
	 * @param descripcionAviso the new descripcion aviso
	 */
	public void setDescripcionAviso(String descripcionAviso) {
        this.descripcionAviso = descripcionAviso;
    }

	/**
	 * Gets the codigo retorno.
	 *
	 * @return the codigo retorno
	 */
	public String getCodigoRetorno() {
        return this.codigoRetorno;
    }

	/**
	 * Sets the codigo retorno.
	 *
	 * @param codigoRetorno the new codigo retorno
	 */
	public void setCodigoRetorno(String codigoRetorno) {
        this.codigoRetorno = codigoRetorno;
    }

	/**
	 * Gets the formato.
	 *
	 * @return the formato
	 */
	public Integer getFormato() {
        return this.formato;
    }

	/**
	 * Sets the formato.
	 *
	 * @param formato the new formato
	 */
	public void setFormato(Integer formato) {
        this.formato = formato;
    }

	/**
	 * Gets the cuerpo.
	 *
	 * @return the cuerpo
	 */
	public Object getCuerpo() {
        return this.cuerpo;
    }

	/**
	 * Sets the cuerpo.
	 *
	 * @param cuerpo the new cuerpo
	 */
	public void setCuerpo(Object cuerpo) {
        this.cuerpo = cuerpo;
    }

	/** The Constant serialVersionUID. */
	private static final long serialVersionUID = 1L;
}
